草庐IT

MySQL Workbench 符号引用

全部标签

c++ - 引用变量的地址和值 C++

我刚刚找到了引用变量,几乎没有什么问题让我很困扰。请看下面的代码。inta=3;//&ais0x28feeintb=5;//&bis0x16faaint&ref=a;//&refis0x28feeref=b;//valueofref=5,addressisstill0x28fee我知道引用变量的地址一旦设置就不能更改,但是当我运行命令时,我的引用的值是如何改变的,但地址是一样的?既然地址是一样的,ref的值不应该还是3,或者a的值不应该变成5,因为一个地址怎么可能有两个值呢?最后,假设“&”符号与我们在指针中使用的符号相同是否正确? 最佳答案

c++ - 引用计数在 shared_ptr 中不起作用

以下代码会导致运行时错误。每个shared_ptr拥有相同的内存,但每个的计数仍然是一。因此,每个共享指针都是不同的,所以当它们超出范围时,它们会尝试释放block,这会导致堆损坏。我的问题是如何避免这种情况?只想添加这样的声明shared_ptrx(p);不可协商,我必须声明。#include#includeusingnamespacestd;intmain(){int*p=newint(10);shared_ptra(p);shared_ptrb(p);shared_ptrc(p);shared_ptrd(p);cout 最佳答案

c++ - 从指针或引用获取迭代器

我想知道是否可以通过仅访问容器内的对象来获得容器内对象的迭代器(例如std::vector),例如通过引用(这意味着我们可以使用&运算符访问指向它的指针)。例如,通常我们将迭代器声明为std::vector::iterator=vec.begin();或std::vector::iterator=next(vec.begin(),idx);但在第一个示例中,我们很可能要按顺序遍历容器,而在第二个示例中,我们知道所需对象的索引。我想知道我们是否可以在不知道对象驻留在容器中的哪个索引的情况下获得对象的迭代器,但如果我们确实有一个引用或指向它的指针,如上所述。似乎已经有人问过这个问题了her

c++ - 获取对 std::list 中最后两个元素的引用

我需要std::list中最后两个元素的别名。最后一个很简单(.back()),但是我应该如何得到它之前的那个呢?我的第一个想法是:在最后一个元素(.end())之后获取一个迭代器,并将它向左移动两次。这是我“制作”的内容:&last_but_one=*----myList.end(),虽然它有效,但我个人觉得它有点模糊,如果我在别人的代码中看到它,我认为我不会轻易解析它1。通读thisanswer显示了一些其他(过于)冗长的方法2:autoiter=n.end();std::advance(iter,-2);&last_but_one=*iter;//thisisoverkill!/

c++ - 权威的 “correct”方法,用于针对size_t测试循环变量时避免有符号/无符号警告

下面的代码生成一个编译器警告:privatevoidtest(){bytebuffer[100];for(inti=0;iwarning:comparisonbetweensignedandunsignedintegerexpressions[-Wsign-compare]这是因为sizeof()返回一个size_t,它是无符号的。我已经看到了许多有关如何处理此问题的建议,但是没有一个建议有很多的支持,也没有一个有任何令人信服的逻辑,也没有任何支持一个方法明显“更好”的引用。最常见的建议似乎是:忽略警告关闭警告使用类型为size_t的循环变量使用带有技巧的size_t类型的循环变量来避

c++ - 使临时变量的 const 引用成员安全吗?

我曾多次尝试这样编写代码:structFoo{doubleconst&f;Foo(doubleconst&fx):f(fx){printf("%f%f\n",fx,this->f);//125125}doubleGetF()const{returnf;}};intmain(){Foop(123.0+2.0);printf("%f\n",p.GetF());//0return0;}但它根本不会崩溃。我还使用valgrind来测试程序,但没有出现错误或警告。因此,我假设编译器自动生成了一段代码,将引用指向另一个隐藏变量。但我真的不确定。 最佳答案

C++ 引用可以赋值吗?

我一直在处理包装在容器类中的引用。为什么以下代码是合法的并且看起来行为正确?#includeclassFoo{public:Foo(inti):i_(i){}inti_;};classFooWrapper{public:FooWrapper(Foo&foo):foo_(foo){}Foo&foo_;};intmain(intargc,char*argv[]){Foofoo(42);FooWrapperfw(foo);FooWrapperfw2=fw;std::cout在没有显式operator=的情况下,我相信C++会进行成员复制。因此,当我执行FooWrapperfw2=fw;时,这

c++ - 存储在类中的闭包中通过引用捕获的临时对象的生命周期

考虑以下代码片段:structfoo{};templatestructimpl:F{impl(F&&f):F{std::move(f)}{}autoget(){return(*this)();}};templateautoreturner(X&&x){returnimpl{[&x]{returnx;}};//^~}intmain(){autox=returner(foo{}).get();}liveexampleonwandbox.org是否保证foo{}在returner(foo{}).get()表达式的整个持续时间内都有效?或者foo{}是否只对returner(foo{})有效,

c++ - 是否有任何 C++ 编译器可以对悬空引用发出警告?

给定以下代码,其中x是对已消失对象的悬空const引用,因此是未定义的行为。autoget_vec(){returnstd::vector{1,2,3,4,5};}constauto&x=get_vec().back();似乎GCC7.3、Clang6.0和MSVC都无法发出警告,即使启用了所有警告。有谁知道在这些情况下是否可以发出警告?在这些情况下,constauto&和auto&&之间有什么区别吗?请注意,如果back()将按值返回,则它不会是未定义行为,因为生命周期临时对象x已扩展为函数scoop。长话短说:我有一个代码库,其中constauto&被用作初始化变量的默认方式,出于

c++ - 左值引用和右值引用的区别

我一直在研究C++11中的右值引用加法。这并不简单,但我觉得我终于开始掌握它了。但是,有一个特定的例子让我感到困惑。具体来说,我不明白这个例子中“b”的含义是什么:inta=27;int&&b=27;编辑:我知道inta=27是左值而不是左值引用。此外,我寻找的不是int&&b=27是什么,而是直觉上它的含义是什么。我很困惑,因为我认为右值不可寻址,但这里我们有一个对右值的引用,这意味着我们可以寻址它。那么为什么它仍然是右值呢? 最佳答案 inta=27;是一个语句,既不是左值也不是右值。它定义了namea,它可以用作int类型的左